<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>forEach方法</title>
  </head>
  <body>
    <script>
      let a = [1, 2, 3, 5, 6, 4];
      a.forEach(myFucntion);
      function myFucntion(item, index) {
        console.log(item, index);
        console.log("this", this); // window
      }

      // forEach方法按顺序为数组中的每个元素调用一次函数
      // 对于没有值的数组元素，不执行forEach()方法
      // 语法: array.forEach(function(currentValue, index, arr), thisValue)
      /*
    可以看到这个方法必须传一个函数，而这个函数必须传参数，
    function (currentValue, index, arr) currentValue 必需，当前元素的值
    index 可选。当前元素的数组索引
    arr 可选，当前元素所属的数组对象（在上面的例子中如果要写，应该写a

    thisValue 可选，要传递给函数，以用作其this值的值
    */
      const arr = [
        { value: 1 },
        { value: 2 },
        { value: 3 },
        { value: 4 },
        { value: 5 },
      ];

      arr.forEach(function (item) {
        item.value = item.value * 10; // 修改的是对象的属性，会影响原对象
        item = { value: 100 }; // 修改的是 item 的引用，不会影响原数组
      });
      console.log(arr); // 输出: [{ value: 10 }, { value: 20 }, { value: 30 }, { value: 40 }, { value: 50 }]

      var list = [
        ["name", "张三"],
        ["title", "Author"],
      ];
      var map = new Map();
      // 这是一种解构赋值的写法 [key, value] = item
      list.forEach(([key, value]) => {
        console.log('key', key)
        console.log('value', value)
        map.set(key, value)
      });
      console.log("map=====", map);
    </script>
  </body>
</html>
